package com.tx.java8.date;

import org.junit.jupiter.api.Test;

import java.time.*;
import java.time.format.DateTimeFormatter;

/**
 * localDateTime,Instant,Duration,Period等api的使用
 */
public class DateTest2 {
    /**
     * LocalDateTime,LocalDate,LocalTime:给用户看的，ISO-8601日历系统时区的日期
    **/
    @Test
    public void test1(){
        //从默认时区中的系统时钟中获取当前日期时间
        LocalDateTime ld = LocalDateTime.now();
        System.out.println(ld); //2019-12-31T17:57:34.500


        //指定日期和时间
        LocalDateTime ld2 = LocalDateTime.of(2020,1,1,0,0,0);
        System.out.println(ld2); //2020-01-01T00:00

        //api使用
        LocalDateTime ld3 = ld.plusYears(2);
        System.out.println("plus:" + ld3); //2021-12-31T18:00:20.571
        System.out.println("minus:" + ld3.minusYears(3));

        //string2date,date2string
        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        System.out.println("当前时间为：" + ld.format(df));
        LocalDateTime ld4 = LocalDateTime.parse("2020-01-02 12:12:12", df);
        System.out.println(ld4);


        //获取年份，月份等
        System.out.println(ld.getYear());
        System.out.println(ld.getMonthValue()); //几月
        System.out.println(ld.getDayOfMonth()); //当前日期在一个月中的第几天
        System.out.println(ld.getDayOfWeek());//当前日期在一个星期中的第几天


        //日期比较
        System.out.println(ld.isAfter(ld2));
        System.out.println(ld.isBefore(ld2));

        //返回当前时间的年月日变化，比如withHours,则返回年月日 23时分秒
        System.out.println(ld.withHour(23)); //2020-01-02T23:35:11.252
        System.out.println(ld.withDayOfMonth(1)); //2020-01-01T11:36:42.450
    }


    /**
     *   Instant:计算机查看,1970-01-01T00:00:00Z到现在的时间
    **/
    @Test
    public void test2(){
        Instant instant = Instant.now(); //获取的是utc时间，和北京时间相差8个时区
        System.out.println(instant);

        //获取秒数
        System.out.println(instant.getEpochSecond());

    }

    /**
     * Duration:时间间隔,基于时间值
    **/
    @Test
    public void test3(){
        Instant start = Instant.parse("2019-10-03T10:15:30.00Z");
        Instant end = Instant.parse("2019-10-03T10:16:30.00Z");
        Duration duration = Duration.between(start,end);
        System.out.println(duration.getSeconds());

        //判断两时间谁更大，如果为false，后面更大
        System.out.println(duration.isNegative());
    }

    /**
     * Period:时间间隔,基于日期
     **/
    @Test
    public void test4(){
        LocalDate start = LocalDate.of(2020,1,1);
        LocalDate end = LocalDate.of(2021,1,1);
        Period period = Period.between(start,end);
        System.out.println("相差的年份：" + period.getYears() + " 相差的月份：" +  period.getMonths() + " 相差的天数：" +  period.getDays());
    }
}
